package com.qianxun.module.datasource1.admin.service;

import com.qianxun.module.datasource1.admin.dto.SysMenuDTO;
import com.qianxun.module.datasource1.admin.entity.SysMenu;
import com.qianxun.module.base.vo.MenuTreeVo;
import com.qianxun.module.base.bo.ZTreeNode;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* com.zch.admin.base.entity.SysMenu模型业务接口
* @author: admin
* @date: 2019-11-14
* @version: 1.0.0
*/
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 添加菜单
     * @param query 菜单信息
     */
    void add(SysMenuDTO query);

    /**
     * 删除指定id菜单和其所有孩子节点
     * @param id 菜单id
     */
    void deleteSelfAndChildrenById(Long id);

    /**
     * 查询指定用户可用的垂直菜单树
     * @param userId 指定用户
     * @return
     */
    List<MenuTreeVo> searchVerticalMenuTree(long userId);

    /**
     * 查询指定用户可用的指定菜单的子菜单水平菜单树
     * @param userId 指定用户
     * @param menuId 指定菜单
     * @return
     */
    List<MenuTreeVo> searchLevelMenuTree(Long userId, long menuId);

    /**
     * 查询指定角色的菜单
     * @param roleId 角色id
     * @return
     */
    List<ZTreeNode> searchMenuTreeByRoleId(Long roleId);

    /**
     * 获取所有的菜单，并按照相同等级菜单的sort字段排序
     * @return
     */
    List<SysMenu> getAllAndOrder();

    /**
     * 获取指定pid下排序值最大的菜单
     * @param pid 父id
     * @return
     */
    SysMenu getOneMaxSortMenuByPid(long pid);
}